#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//int main() {
//    int n, m;
//    cin >> n >> m;
//    vector<int> a(n);
//    for (int i = 0; i < n; ++i)
//    {
//        cin >> a[i];
//        a[i] = a[i] % m;
//    }
//    sort(a.begin(), a.end());
//
//    int ans = 0;
//    int i = 0;
//    int count = 0;
//
//    for (; i < n; ++i)
//    {
//        if (a[i] == 0)
//            ans = (ans + count++) % 998244353;
//        else
//            break;
//    }
//
//    int j = n - 1;
//    while (i < j)
//    {
//        if (a[i] + a[j] == m)
//        {
//            int z = j;
//            while (z > i && a[z] == a[j])
//                --z;
//            ans = (ans + z) % 998244353;
//            i++;
//        }
//
//        else if (a[i] + a[j] < m)
//            i++;
//        else
//            j--;
//    }
//
//    cout << ans << endl;
//
//    return 0;
//}


//int main() {
//    int n, X;
//    cin >> n >> X;
//    vector<int> v(n + 1, 0);
//    for (int i = 0; i < n; ++i)
//    {
//        cin >> v[i];
//    }
//
//    for (int i = n - 1; i >= 0; --i)
//    {
//        v[i] += v[i + 1];
//    }
//    int count = 0;
//    int sum = 0;
//    for (int i = n - 1; i >= 0; --i)
//    {
//        if (count <= X)
//        {
//            count += v[i];
//            if (count == X)
//            {
//                cout << ++sum << endl;
//                break;
//            }
//            else if (count > X)
//            {
//                cout << sum << endl;
//                break;
//            }
//            else 
//                ++sum;
//        }
//        else 
//            break;
//
//    }
//    return 0;
//}


typedef long long LL;
//int main()
//{
//	LL N, T;
//	cin >> N >> T;
//	vector<LL> v(N);
//	vector<LL> a(N);
//	for (int i = 0; i < N; ++i)
//	{
//		cin >> v[i];
//		cin >> a[i];
//	}
//	LL first = v[0], second = v[0];
//
//	LL score = 0;
//	LL ans = LONG_MAX;
//	for (int right = 0, left = 0; right < N; ++right)
//	{
//		score += v[right];
//		if (a[right] > first)
//		{
//			second = first;
//			first = a[right];
//		}
//		else if (a[right] > second)
//			second = a[right];
//
//		if (score >= T)
//		{
//			ans = min(ans, first);
//			if (a[left] == first)
//			{
//				first = second;
//				second = 0;
//			}
//			else if (a[left] == second)
//				second = 0;
//
//			score -= v[left++];
//		}
//	}
//	cout << ans << endl;
//	return 0;
//}


int main() {
    int N, M;
    cin >> N >> M;
    vector<LL> v(N);
    for (int i = 0; i < N; ++i)
    {
        cin >> v[i];
    }
    vector<vector<LL>> vv(N, vector<LL>(N));
    vector<pair<LL, LL>> s;
    for (int i = 0; i < N; ++i)
    {
        for (int j = i; j < N; ++j)
        {
            if (i == j)
                vv[i][j] = v[i];
            else
            {
                vv[i][j] = vv[i][j - 1] + v[j];
                if (vv[i][j] == M)
                    s.push_back({ i, j });
            }
        }
    }
    LL ans = 0;
    int i = 0;
    while (i < s.size())
    {
        pair<LL, LL> index = s[i];
        while (i < s.size() && s[i].first < index.second)
            i++;
        ans++;
    }
    cout << ans << endl;
    return 0;
}